home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 021-030 / amok29 / disktohard / hardtodisk.mod < prev    next >
Text File  |  1993-11-04  |  3KB  |  81 lines

  1. (**********************************************************************
  2.  
  3.     :Program.    HardToDisk.mod
  4.     :Contents.   copies HD-file created by DiskToHard to a floppy disk
  5.     :Author.     Nicolas Benezan [bne]
  6.     :Author.     Norbert Klapczynski
  7.     :Copyright.  Public Domain
  8.     :Language.   Modula-2
  9.     :Translator. M2Amiga AMSoft V3.2
  10.     :Imports.    ErrorReq1.3         (-> Amok#25:M2Make1.9/Modules)
  11.     :Imports.    MemSystem1.4        (-> Amok#25:M2Make1.9/Modules)
  12.     :Imports.    TrackDiskSupport2.1 (-> Amok#19:TrackDiskSupport_2.1)
  13.     :History.    V1.0 Norbert, [bne] 15.Aug.1989
  14.     :History.    V1.1 [bne] 1.Dez.1989 (+ verify, cosmetics)
  15.  
  16. **********************************************************************)
  17.  
  18. MODULE HardToDisk;
  19.  
  20. FROM Arts             IMPORT TermProcedure;
  21. FROM Arguments        IMPORT GetArg;
  22. FROM Dos              IMPORT Close, FileHandlePtr, oldFile, Open, Read;
  23. FROM ErrorReq         IMPORT Assert;
  24. FROM MemSystem        IMPORT Deallocate, NoCareAllocMem;
  25. FROM SYSTEM           IMPORT ADDRESS, ADR;
  26. FROM TrackDiskSupport IMPORT ChangeState, CloseDiskDevice, DeviceInfo,
  27.                              DiskUnit, FormatTrack, GetDeviceInfo,
  28.                              GetDiskChange, InhibitDrive, OpenDiskDevice,
  29.                              ReadBlock;
  30.  
  31. VAR
  32.   Unit: DiskUnit;
  33.   File: FileHandlePtr;
  34.   Info: DeviceInfo;
  35.   BlocksPerTrack, Block, Cylinder, Head, Len: INTEGER;
  36.   Change: LONGINT;
  37.   Buffer, Buffer2: ADDRESS;
  38.   DiskName: ARRAY [0..30] OF CHAR;
  39.  
  40. PROCEDURE Cleanup;
  41.   BEGIN
  42.     IF File # NIL THEN
  43.       Close (File);
  44.     END;
  45.     IF InhibitDrive (Unit, FALSE) THEN END;
  46.   END Cleanup;
  47.  
  48. BEGIN
  49.   File:= NIL;
  50.   IF (OpenDiskDevice ("DF0", Unit) = 0) AND ChangeState (Unit) THEN
  51.     TermProcedure (Cleanup);
  52.     Assert (InhibitDrive (Unit, TRUE), ADR ("Drive nicht verfügbar"));
  53.     Change:= GetDiskChange (Unit);
  54.     GetDeviceInfo (Unit, Info);
  55.     WITH Info DO
  56.       NoCareAllocMem (Buffer, trackLen, TRUE);
  57.       NoCareAllocMem (Buffer2, trackLen, TRUE);
  58.       GetArg (1, DiskName, Len);
  59.       File:= Open (ADR (DiskName), oldFile);
  60.       IF File # NIL THEN
  61.         Block:= 0;
  62.         Cylinder:= 0;
  63.         BlocksPerTrack:= trackLen DIV blockLen;
  64.         REPEAT
  65.           FOR Head:= 0 TO 1 DO
  66.             Assert (Read (File, Buffer, trackLen) = trackLen,
  67.                    ADR ("Lesefehler"));
  68.             Assert (FormatTrack (Unit, Cylinder, Head, Buffer, Change) = 0,
  69.                    ADR ("Schreibfehler"));
  70.             Assert (ReadBlock(Unit, Block, BlocksPerTrack, Buffer2, Change)
  71.                     = 0, ADR ("Überprüfungsfehler"));
  72.             INC (Block, BlocksPerTrack);
  73.           END;
  74.           INC (Cylinder);
  75.         UNTIL Block >= numBlocks;
  76.       END;
  77.     END;
  78.   END;
  79. END HardToDisk.
  80.  
  81.